/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.Punto;
import Modelo.ReportePdf;
import Modelo.ecc;
import Vista.vistaEcc;

/**
 *
 * @author Jonnatan
 */
public class ControladorEcc {

    private vistaEcc vista;
    // private ControladorPrincipal cPrincipal;
    private ControladorEccReporte cReporte;
    private ecc modelo;
    private String reporte;

    public ControladorEcc() {
        //  this.cPrincipal = cPadre;


    }

    public void desEncriptar(String text, String text0, String text1, String text2, String text3, String text4, String text5, String text6, String text7) {
        modelo = new ecc();
        modelo.setA(Integer.valueOf(text));
        modelo.setB(Integer.valueOf(text0));
        modelo.setP(Integer.valueOf(text1));
        modelo.setG(Integer.valueOf(text2), Integer.valueOf(text3));
        modelo.setClavePrivada(Integer.valueOf(text4));
        if (modelo.curvaValida())
        {
            modelo.generaClavePublica();

            if (modelo.pertenece(new Punto(Integer.valueOf(text6), Integer.valueOf(text7))))
            {
             
                if (modelo.validaClave(Integer.valueOf(text4)))
                {
                    modelo.desencriptar(Integer.valueOf(text5), new Punto(Integer.valueOf(text6), Integer.valueOf(text7)));
                    this.reporte = modelo.getReporte();
                    vista.setTextoEnClaro(modelo.getC3().getX(), modelo.getC3().getY());


                } else
                {
                    vista.setError("La clave no es válida");
                }
            } else
            {
                vista.setError("El punto no pertenece a la curva");
                

            }
        } else
        {
            vista.setError("Los parámetros de la curva no son válidos");
        }


    }

    public void encriptar(String text, String text0, String text1, String text2, String text3, String text4, String text5, String text6, String text7) {


        modelo = new ecc();
        modelo.setA(Integer.valueOf(text));
        modelo.setB(Integer.valueOf(text0));
        modelo.setP(Integer.valueOf(text1));
        modelo.setG(Integer.valueOf(text2), Integer.valueOf(text3));
        modelo.setClavePrivada(Integer.valueOf(text4));
        modelo.setC2(new Punto(Integer.valueOf(text6), Integer.valueOf(text7)));

        if (modelo.curvaValida()) {
            modelo.generaClavePublica();

            if (modelo.pertenece(modelo.getC2())) {
               if(modelo.validaClave(Integer.valueOf(text4)))
               {
                modelo.encriptar(Integer.valueOf(text5), modelo.getC2());
                this.reporte = modelo.getReporte();
                vista.setTextoCifrado(modelo.getC1().getX(), modelo.getC1().getY(), modelo.getC2().getX(), modelo.getC2().getY());
               }else
               {
                vista.setError("La clave no es válida");
               }

            } else {
                vista.setError("El punto no pertenece a la curva");
            }
        } else {
            vista.setError("Los parámetros de la curva no son válidos");
        }


    }

    public void mostrarReporte() {
        this.vista.setVisible(false);
        this.cReporte = new ControladorEccReporte(this);
        this.cReporte.levantarVista(this.reporte);
        //this.cPrincipal.mostrarReporte(this.reporte);

    }

    public void desdeReporte() {
        this.vista.setVisible(true);
    }

    public void guardarReporte(String ruta) {
        ReportePdf r = new ReportePdf();
        r.exportToPdf(this.reporte, ruta + "/Reporte de Encriptacion ECC");
    }

    public void levantarVista() {
        this.vista = new vistaEcc(this);

    }
}
